home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Tools 3
/
Amiga Tools 3.iso
/
grafik
/
raytracing
/
rayshade-4.0.6.3
/
libshade
/
lex.l
< prev
next >
Wrap
Text File
|
1994-08-09
|
7KB
|
259 lines
/* lex.l */
/* Copyright (C) 1989, 1991, Craig E. Kolb */
/* All rights reserved. */
/* */
/* This software may be freely copied, modified, and redistributed, */
/* provided that this copyright notice is preserved on all copies. */
/* */
/* You may not distribute this software, in whole or in part, as part of */
/* any commercial product without the express consent of the authors. */
/* */
/* There is no warranty or other guarantee of fitness of this software */
/* for any purpose. It is provided solely "as is". */
/* */
/* lex.l,v 4.1 1994/08/09 08:04:29 explorer Exp */
%{
#include "config.h"
#include "rayshade.h"
#ifdef I_STRING
#include <string.h>
#else
#include <strings.h>
#endif
#include "liblight/light.h"
#include "libsurf/atmosphere.h"
#include "libsurf/surface.h"
#include "libtext/texture.h"
#include "libobj/geom.h"
#include "libobj/ifs.h"
#include "libobj/mountain.h"
#include "libobj/fractalobject.h"
#include "symtab.h"
#include "y.tab.h"
extern char *strsave();
%}
alpha [a-zA-Z]
special [\.\_-]
digit [0-9]
exp [Ee][-+]?{digit}+
string {alpha}({alpha}|{digit}|{special})*
filename "/"?"/"?(("."|".."|{string})"/")*{string}
%p 15000
%e 1500
%n 800
%%
[ \t\n] ;
^# handlehash();
"/*" skipcomments();
ambient return tAMBIENT;
aperture return tAPERTURE;
applysurf return tAPPLYSURF;
area return tAREA;
atmosphere return tATMOSPHERE;
background return tBACKGROUND;
bezier return tBEZIER;
blob return tBLOB;
cblob return tCBLOB;
blotch return tBLOTCH;
body return tBODY;
box return tBOX;
bump return tBUMP;
checker return tCHECKER;
cloud return tCLOUD;
coeffs return tCOEFFS;
cone return tCONE;
component return tCOMPONENT;
contrast return tCONTRAST;
crop return tCROP;
cursurf return tCURSURF;
cutoff return tCUTOFF;
cylinder return tCYL;
cylindrical return tCYLINDRICAL;
define return tDEFINE;
diffuse return tDIFFUSE;
difference return tDIFFERENCE;
directional return tDIRECTIONAL;
disc return tDISC;
end return tEND;
extended return tEXTENDED;
extinct return tEXTINCT;
eyep return tEYEP;
eyesep return tEYESEP;
false return tFALSE;
filter return tFILTER;
fbm return tFBM;
fbmbump return tFBMBUMP;
flame return tFLAME;
focaldist return tFOCALDIST;
fog return tFOG;
fogdeck return tFOGDECK;
fov return tFOV;
fracland return tFRACLAND;
framelength return tFRAMELENGTH;
frames return tFRAMES;
gauss return tGAUSS;
gloss return tGLOSS;
gradient return tGRADIENT;
grid return tGRID;
heightfield return tHEIGHTFIELD;
image return tIMAGE;
index return tINDEX;
intersect return tINTERSECT;
jitter return tJITTER;
light return tLIGHT;
linear return tLINEAR;
list return tLIST;
log return tLOG;
lookp return tLOOKP;
map return tMAP;
marble return tMARBLE;
maxdepth return tMAXDEPTH;
mount return tMOUNT;
mist return tMIST;
name return tNAME;
nojitter return tNOJITTER;
noshadow return tNOSHADOW;
object return tOBJECT;
outfile return tOUTFILE;
plane return tPLANE;
planar return tPLANAR;
point return tPOINT;
poly return tPOLY;
polygon return tPOLY;
print return tPRINT;
projector return tPROJECTOR;
quiet return tQUIET;
radial return tRADIAL;
random return tRANDOM;
range return tRANGE;
reflect return tREFLECT;
reflective return tREFLECT;
report return tREPORT;
resolution return tSCREEN; /* A synonym for screen */
revlog return tREVLOG;
rotate return tROTATE;
rotspline return tROTSPLINE; /* Rotated cubic spline */
sample return tSAMPLE;
scale return tSCALE;
screen return tSCREEN;
shadowtransp return tSHADOWTRANSP;
shutter return tSHUTTER;
sky return tSKY;
smooth return tSMOOTH;
sphere return tSPHERE;
spherical return tSPHERICAL;
specular return tSPECULAR;
specpow return tSPECPOW;
spot return tSPOT;
starttime return tSTARTTIME;
stripe return tSTRIPE;
surface return tSURFACE;
sweptsph return tSWEPTSPH;
textsurf return tTEXTSURF;
texture return tTEXTURE;
tile return tTILE;
torus return tTORUS;
transform return tTRANSFORM;
translate return tTRANSLATE;
translu return tTRANSLU;
translucency return tTRANSLU;
transp return tTRANSP;
transparent return tTRANSP;
triangle return tTRIANGLE;
triangleuv return tTRIANGLEUV;
true return tTRUE;
union return tUNION;
up return tUP;
uv return tUV;
verbose return tVERBOSE;
window return tWINDOW;
windy return tWINDY;
wood return tWOOD;
xbezier return tXBEZIER;
ybezier return tYBEZIER;
zbezier return tZBEZIER;
xcoeffs return tXCOEFFS;
ycoeffs return tYCOEFFS;
zcoeffs return tZCOEFFS;
normalweighting return tNORMALWEIGHTING;
minsize return tMINSIZE;
lowpass return tLOWPASS;
highpass return tHIGHPASS;
ifs return tIFS;
constant return tCONSTANT;
bounding return tBOUNDING;
fpoints return tFPOINTS;
ftriangles return tFTRIANGLES;
fentities return tFENTITIES;
fentity return tENTITY;
fractalobject return tFRACTALOBJECT;
mountain return tMOUNTAIN;
{digit}+ |
{digit}+"."{digit}*({exp})? |
{digit}*"."{digit}+({exp})? |
{digit}+{exp} {yylval.d = atof(yytext); return tFLOAT;}
{string} {yylval.c = strsave(yytext); return tSTRING;}
{filename} {yylval.c = strsave(yytext); return tFILENAME;}
. return yytext[0];
%%
#ifdef yywrap
#undef yywrap
#endif
yywrap() {return 1;}
/*
* Skip over comments.
*/
skipcomments()
{
char c;
while (1) {
while (input() != '*')
;
if ((c = input()) == '/')
return;
unput(c);
}
}
/*
* Deal with ccp-produced lines of the form:
* # n "filename"
* and
* # n
* Where filename is the name of the file being processed, and n is
* the current line number in that file.
*/
handlehash()
{
char buf[BUFSIZ];
int i;
extern int yylineno;
extern char yyfilename[];
/*
* Read the entire line into buf.
*/
for (i = 0; (buf[i] = input()) != '\n'; i++)
;
unput(buf[i]); /* To make sure consecutive # lines work. */
buf[i] = (char)NULL; /* Replace newline with NULL. */
/*
* Complain if the line was not of the form #n "filename"
*/
if ((i = sscanf(buf,"%d \"%[^\"]s\"", &yylineno, yyfilename)) == 0 &&
(i = sscanf(buf," line %d \"%[^\"]s\"",&yylineno,yyfilename))==0) {
RLerror(RL_PANIC, "Unknown '#' control (%s).\n",buf);
exit(1);
}
if (i == 1 && (index(buf,'"') != (char *)NULL)) {
/*
* Filename was given as ""
*/
(void)strcpy(yyfilename, "stdin");
}
yylineno--; /* The newline we unput will increment yylineno */
}